package main

import "fmt"

// 方法的定义实例
type Person struct {
	name string
	age  int8
}

// 构造函数
func newPerson(name string, age int8) *Person {
	return &Person{
		name: name,
		age:  age,
	}
}

// 定义方法
func (p Person) Dream() {
	fmt.Printf("%s的梦想是学好语言!\n", p.name)
}

// 修改年龄
// 指针接收者指的是接收者的类型是指针
func (p *Person) SetAge(newAge int8) {
	p.age = newAge
}

// 这是值接收者来修改年龄的方法
func (p Person) setAge2(newAge int8) {
	p.age = newAge
}

func main() {
	p1 := newPerson("xinKong", 20)
	//(*p1).Dream() 语法糖
	p1.Dream()
	// 调用修改年龄的方法
	fmt.Println(p1.age)
	p1.SetAge(50)
	fmt.Println(p1.age)
	// 值接收者不会修改p1中的age
	p1.setAge2(30)
	fmt.Println(p1.age)
}
